#include <stdio.h>
#include <stdlib.h>

#define show_ppp(ppp, m, n, p) do { \
    int i, j, k; \
    puts(#ppp ":"); \
    for(i=0; i<m; i++) { \
        for(j=0; j<n; j++) { \
            for(k=0; k<n; k++) { \
                printf("%-4d", ppp[i][j][k]); \
            } \
        } \
    } \
    putchar('\n'); \
}while(0) 


int main(void) {
    int m=2, n=2, p=2;
    int ppp1[m][n][p];
    int ***ppp2 = calloc(m, sizeof(void*));
    typedef int IA[p];
    typedef IA IAA[n];
    IAA *ppp3 = calloc(m, sizeof(IAA));
    int i, j, k;
    for(i=0; i<m; i++) {
        ppp2[i] = calloc(n, sizeof(void*));
        for(j=0; j<n; j++) {
            ppp2[i][j] = calloc(p, sizeof(int));
            for(k=0; k<p; k++) {
                printf("input value for ppp1/2/3[%d][%d][%d]: ", i, j, k);
                fflush(stdin);
                scanf("%d", &ppp1[i][j][k]);
                ppp2[i][j][k] = ppp1[i][j][k];
                ppp3[i][j][k] = ppp2[i][j][k];
            }
        }

    }
    show_ppp(ppp1, m, n, p);
    show_ppp(ppp2, m, n, p);
    show_ppp(ppp3, m, n, p);
    
    //free ppp2
    for(i=0; i<m; i++) {
        for(j=0; j<n; j++) {
            free(ppp2[i][j]);
        }
        free(ppp2[i]);
    }
    free(ppp2);
    
    //free ppp3
    free(ppp3);

    return 0;

}
